Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit bc97e513e8192eb00ba5d7577adf3d20a3a653e6


Parents : de35a9d
Author : Kevin Brosius <cobra@compuserve.com>
Date : 2025-02-23T06:52:27-05:00

Initial support for Seeed ESP32S3 with Wio-SX1262
Work in progress
Status: Boots, display works on Xiao espansion base,
radio is recognized
Todo:
PMU
Firmware hash fails even if generated and then written
Radio testing
Buttons / LEDs
other?

Changes

3 files changed, 82 insertions(+), 4 deletions(-)

M Boards.h +62 -1
M Utilities.h +12 -1
M sx126x.cpp +8 -2

Diff

diff --git a/Boards.h b/Boards.h
index adae722..8ba926c 100644
--- a/Boards.h
+++ b/Boards.h
@@ -65,6 +65,10 @@
#define MODEL_DB 0xDB // LilyGO T-Beam Supreme, 433 MHz
#define MODEL_DC 0xDC // LilyGO T-Beam Supreme, 868 MHz
+ #define PRODUCT_SEEED_XIAO_ESP32S3 0xEB
+ #define BOARD_SEEED_XIAO_ESP32S3 0x3E
+ #define MODEL_DD 0xDD
+
#define PRODUCT_T32_10 0xB2
#define BOARD_LORA32_V1_0 0x39
#define MODEL_BA 0xBA // LilyGO T3 v1.0, 433 MHz
@@ -140,6 +144,9 @@
#endif
#endif
+// test build - KJB
+#define BOARD_MODEL BOARD_SEEED_XIAO_ESP32S3
+
#define HAS_DISPLAY false
#define HAS_BLUETOOTH false
#define HAS_BLE false
@@ -150,7 +157,8 @@
#define HAS_INPUT false
#define HAS_SLEEP false
#define PIN_DISP_SLEEP -1
- #define VALIDATE_FIRMWARE true
+ //#define VALIDATE_FIRMWARE true
+ #define VALIDATE_FIRMWARE false
#if defined(ENABLE_TCXO)
#define HAS_TCXO true
@@ -593,6 +601,59 @@
#endif
#endif
+ #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
+ #define IS_ESP32S3 true
+ #define MODEM SX1262
+ #define DIO2_AS_RF_SWITCH true
+ #define HAS_BUSY true
+ #define HAS_TCXO true
+// #define OCP_TUNED 0x38
+
+ #define HAS_DISPLAY true
+// #define HAS_CONSOLE true
+ #define HAS_BLUETOOTH false
+ #define HAS_BLE true
+// #define HAS_PMU true
+ #define HAS_NP false
+ #define HAS_SD false
+ #define HAS_EEPROM true
+
+ #define HAS_INPUT false
+ #define HAS_SLEEP false
+
+// #define PMU_IRQ 40
+// #define I2C_SCL 41
+// #define I2C_SDA 42
+
+ const int pin_btn_usr1 = 0;
+
+ const int pin_cs = 41; //16;
+ const int pin_reset = 42; //14;
+ const int pin_sclk = 7; //11;
+ const int pin_mosi = 9; //15;
+ const int pin_miso = 8; //13;
+ const int pin_tcxo_enable = -1;
+ const int pin_dio = 39; //21;
+ const int pin_busy = 40; //18;
+
+// const int SD_MISO = 37;
+// const int SD_MOSI = 35;
+// const int SD_CLK = 36;
+// const int SD_CS = 47;
+
+// const int IMU_CS = 34;
+
+ // HAS LED/tx on board - 47
+ #if HAS_NP == false
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = -1;
+ const int pin_led_tx = 48; //47;
+ #else
+ const int pin_led_rx = -1;
+ const int pin_led_tx = 48; //47;
+ #endif
+ #endif
+
#else
#error An unsupported ESP32 board was selected. Cannot compile RNode firmware.
#endif

diff --git a/Utilities.h b/Utilities.h
index e08461f..a9154e4 100644
--- a/Utilities.h
+++ b/Utilities.h
@@ -285,6 +285,13 @@ uint8_t boot_vector = 0x00;
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
void led_id_on() { }
void led_id_off() { }
+ #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
+ void led_rx_on() { digitalWrite(pin_led_rx, LED_ON); }
+ void led_rx_off() { digitalWrite(pin_led_rx, LED_OFF); }
+ void led_tx_on() { }
+ void led_tx_off() { }
+ void led_id_on() { }
+ void led_id_off() { }
#elif BOARD_MODEL == BOARD_HUZZAH32
void led_rx_on() { digitalWrite(pin_led_rx, HIGH); }
void led_rx_off() { digitalWrite(pin_led_rx, LOW); }
@@ -1264,6 +1271,8 @@ void setTXPower() {
if (model == MODEL_DB) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_DC) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
+ if (model == MODEL_DD) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
+
if (model == MODEL_E4) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_E9) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_E3) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
@@ -1467,7 +1476,7 @@ bool eeprom_product_valid() {
#if PLATFORM == PLATFORM_AVR
if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW) {
#elif PLATFORM == PLATFORM_ESP32
- if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1) {
+ if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1 || rval == PRODUCT_SEEED_XIAO_ESP32S3) {
#elif PLATFORM == PLATFORM_NRF52
if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HELTEC_T114 || rval == PRODUCT_TECHO || rval == PRODUCT_HMBRW) {
#else
@@ -1503,6 +1512,8 @@ bool eeprom_model_valid() {
if (model == MODEL_16 || model == MODEL_17) {
#elif BOARD_MODEL == BOARD_TBEAM_S_V1
if (model == MODEL_DB || model == MODEL_DC) {
+ #elif BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
+ if (model == MODEL_DD) {
#elif BOARD_MODEL == BOARD_LORA32_V1_0
if (model == MODEL_BA || model == MODEL_BB) {
#elif BOARD_MODEL == BOARD_LORA32_V2_0

diff --git a/sx126x.cpp b/sx126x.cpp
index 4c06862..ebbde43 100644
--- a/sx126x.cpp
+++ b/sx126x.cpp
@@ -122,12 +122,17 @@ sx126x::sx126x() :
{ setTimeout(0); }
bool sx126x::preInit() {
+// delay(300);
+ //LoRa->reset();
+// reset();
+// delay(100);
+
pinMode(_ss, OUTPUT);
digitalWrite(_ss, HIGH);
#if BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_TDECK
SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs);
- #elif BOARD_MODEL == BOARD_TECHO
+ #elif BOARD_MODEL == BOARD_TECHO // || BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
SPI.setPins(pin_miso, pin_sclk, pin_mosi);
SPI.begin();
#else
@@ -146,6 +151,7 @@ bool sx126x::preInit() {
break;
}
delay(100);
+ Serial.println( uint16_t(syncmsb << 8 | synclsb) );
}
if ( uint16_t(syncmsb << 8 | synclsb) != 0x1424 && uint16_t(syncmsb << 8 | synclsb) != 0x4434) {
return false;
@@ -570,7 +576,7 @@ void sx126x::sleep() { uint8_t byte = 0x00; executeOpcode(OP_SLEEP_6X, &byte, 1)
void sx126x::enableTCXO() {
#if HAS_TCXO
- #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_HELTEC32_V3
+ #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_SEEED_XIAO_ESP32S3
uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
#elif BOARD_MODEL == BOARD_TBEAM
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────